/*
 *  agregar_comentario_request.cpp
 *  Wilson
 *
 *  Created by Sebastian Orfino on 12/1/11.
 *  Copyright 2011 lbs3. All rights reserved.
 *
 */

#include "VCPlugInHeaders.h"

//sdk includes
#include "IDocument.h"
#include "ILayoutUIUtils.h"
#include "Utils.h"

//stl includes
#include <sstream>

//project includes
#include "agregar_comentario_request.h"
#include "xmp_facade.h"
#include "pugixml.hpp"
#include "agregar_comentario_response.h"



using namespace eventos;

eventos::agregar_comentario_request::agregar_comentario_request() 
{
}


void agregar_comentario_request::operator()(const csxs::event::Event * const eventParam)
{
	using namespace std;
	using namespace pugi;
	
	istringstream is(eventParam->data);
	xml_document xml_doc;
	
	agregar_comentario_response msg;
		
		if (xml_doc.load(is)) {
	
		xml_node payload_n = xml_doc.child("payload");
		
		timestamp() = payload_n.child_value("timestamp");
		id_nota() = payload_n.child_value("id");
		creador() = payload_n.child_value("creador");
		texto() = payload_n.child_value("texto");
	
		//notar que siempre se agrega el comentario al documento que el usuario esta editando.
		IDocument *  doc = Utils<ILayoutUIUtils>()->GetFrontDocument();
		if (!doc) return;
		
		/*
		 std::string id_nota; /// en que nota va este comentario
		 std::string texto; ///el texto del comentario;
		 std::string creador; ///quien lo hizo
		 std::string cuando; //cuando
		 */
		xmp::info_comentario_t com = { id_nota(), texto(), creador(), timestamp() };
		xmp::wilson_metadata wil_doc(::GetUIDRef(doc));
		wil_doc.agregar_comentario(com);
		
		msg.comentario_agregado() = com;
		
	}
	
	wilson::despachar(msg);
	
}

std::string agregar_comentario_request::payload() const 
{
	using namespace std;
	using namespace pugi;
	
	ostringstream ostr;
	xml_document xml_doc;
	if (xml_doc.load("<payload></payload>")) {
	
		xml_node payload_n = xml_doc.child("payload");
		payload_n.append_attribute("mensaje") = ID();
		
		xml_node id_n = payload_n.append_child("id");
		xml_node creador_n = payload_n.append_child("creador");
		xml_node timestamp_n = payload_n.append_child("timestamp");
		xml_node texto_n = payload_n.append_child("texto");
		
		id_n.append_child(node_pcdata).set_value(id_nota_.c_str());
		creador_n.append_child(node_pcdata).set_value(uname_.c_str());
		timestamp_n.append_child(node_pcdata).set_value(timestamp_.c_str());
		texto_n.append_child(node_pcdata).set_value(texto_.c_str());
		
		xml_doc.save(ostr);
		
	}
	
	
	return ostr.str();
}
